﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace ProyectoFinal
{
    public partial class Form5 : Form
    {
        static string rutaIsotoposSQL = "Data Source=localhost;Initial Catalog=Isotopos;Integrated Security=True;";

        //DataSet dsIsotopos;
        DataSet TablaEmpleados;
        DataSet TablaMesas;
        static SqlConnection con = new SqlConnection(rutaIsotoposSQL);
        static SqlCommand cmd = new SqlCommand("select * from Empleados ", con);
        static SqlCommand cmd2 = new SqlCommand("select * from Mesas ", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        SqlDataAdapter da2 = new SqlDataAdapter(cmd2);

        public Form5()
        {
            InitializeComponent();
        }

        private void Form5_Load(object sender, EventArgs e)
        {
            cargar_datos_empleados();
            cargar_datos_mesas();
        }

        private void cargar_datos_empleados()
        {
            string ConsultaSQLClientes = "Select * from Empleados order by IdEmpleado";
            TablaEmpleados = new DataSet();

            SqlConnection cn = new SqlConnection(rutaIsotoposSQL);
            SqlDataAdapter adaptador = new SqlDataAdapter(ConsultaSQLClientes, cn);
            cn.Open();
            adaptador.Fill(TablaEmpleados, "Empleados");

            datagrid_empleados.DataSource = TablaEmpleados.Tables[0];        
        }

        private void cargar_datos_mesas()
        {
            string ConsultaSQLClientes = "Select * from Mesas order by IdMesa";
            TablaMesas = new DataSet();

            SqlConnection cn = new SqlConnection(rutaIsotoposSQL);
            SqlDataAdapter adaptador = new SqlDataAdapter(ConsultaSQLClientes, cn);
            cn.Open();
            adaptador.Fill(TablaMesas, "Mesas");

            datagrid_mesas.DataSource = TablaMesas.Tables[0]; 
        }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ActualizarCambios2(rutaIsotoposSQL, ref TablaMesas);
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnSalir_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ActualizarCambios1(rutaIsotoposSQL, ref TablaEmpleados);
        }

        private void ActualizarCambios1(String RutaBD, ref DataSet ds)
        {
            DataSet dsActualizar;
            DataSet dsEliminar;
            DataSet dsAgregar;

            if (TablaEmpleados.HasChanges(DataRowState.Modified))
            {
                dsActualizar = new DataSet();
                dsActualizar = TablaEmpleados.GetChanges(DataRowState.Modified);
                ActualizarEmpleadosEnBD(rutaIsotoposSQL, "Empleados", dsActualizar);
            }
            if (TablaEmpleados.HasChanges(DataRowState.Added))
            {
                dsAgregar = new DataSet();
                dsAgregar = TablaEmpleados.GetChanges(DataRowState.Added);
                InsertarEmpleadosEnBD(rutaIsotoposSQL, "Empleados", dsAgregar);
            }
            if (TablaEmpleados.HasChanges(DataRowState.Deleted))
            {
                dsEliminar = new DataSet();
                dsEliminar = TablaEmpleados.GetChanges(DataRowState.Deleted);
                EliminarEmpleadosEnBD(rutaIsotoposSQL, "Empleados", dsEliminar);
            }
        }

        private void ArmarParametrosEmpleados(ref SqlCommand Comando, DataRow fila)
        {
            SqlParameter SqlParametros = new SqlParameter();
            SqlParametros = Comando.Parameters.Add("@IdEmpleado", SqlDbType.Int);
            SqlParametros.Value = fila["IdEmpleado"];
            SqlParametros = Comando.Parameters.Add("@Apellidos", SqlDbType.NVarChar, 20);
            SqlParametros.Value = fila["Apellidos"];
            SqlParametros = Comando.Parameters.Add("@Nombre", SqlDbType.NVarChar, 10);
            SqlParametros.Value = fila["Nombre"];
            SqlParametros = Comando.Parameters.Add("@FechaNacimiento", SqlDbType.DateTime);
            SqlParametros.Value = fila["FechaNacimiento"];
            SqlParametros = Comando.Parameters.Add("@FechaContratación", SqlDbType.DateTime);
            SqlParametros.Value = fila["FechaContratación"];
            SqlParametros = Comando.Parameters.Add("@Dirección", SqlDbType.NVarChar, 60);
            SqlParametros.Value = fila["Dirección"];
            SqlParametros = Comando.Parameters.Add("@Ciudad", SqlDbType.NVarChar, 15);
            SqlParametros.Value = fila["Ciudad"];
            SqlParametros = Comando.Parameters.Add("@TelDomicilio", SqlDbType.NVarChar, 24);
            SqlParametros.Value = fila["TelDomicilio"];
        }

        private void ArmarParametrosEmpleadosEliminar(ref SqlCommand Comando, DataRow fila)
        {
            SqlParameter SqlParametros = new SqlParameter();
            SqlParametros = Comando.Parameters.Add("@IdEmpleado", SqlDbType.Int);
            SqlParametros.Value = fila["IdEmpleado"];
        }

        private void ActualizarEmpleadosEnBD(String RutaBD, String NombreTabla, DataSet ds)
        {
            int FilasActualizadas;
            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
            {
                SqlCommand Comando = new SqlCommand();
                ArmarParametrosEmpleados(ref Comando, fila);
                FilasActualizadas = EjecutarEmpleados(rutaIsotoposSQL, "ActualizarEmpleado", Comando);

                if (FilasActualizadas > 1)
                    MessageBox.Show("Se modificaron " + FilasActualizadas + " Empleados");

                else
                    MessageBox.Show("Se modificó " + FilasActualizadas + " Empleado");
            }
        }

        private int EjecutarEmpleados(String RutaBD, String NombreSP, SqlCommand Comando)
        {
            int FilasCambiadas;
            SqlConnection Conexion = new SqlConnection(RutaBD);
            Conexion.Open();
            SqlCommand cmd = new SqlCommand();
            cmd = Comando;
            cmd.Connection = Conexion;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = NombreSP;
            FilasCambiadas = cmd.ExecuteNonQuery();
            Conexion.Close();
            return FilasCambiadas;
        }

        private void InsertarEmpleadosEnBD(String RutaBD, String NombreTabla, DataSet ds)
        {
            int FilasInsertadas;
            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
            {
                SqlCommand Comando = new SqlCommand();
                ArmarParametrosEmpleados(ref Comando, fila);
                FilasInsertadas = EjecutarEmpleados(rutaIsotoposSQL, "InsertarEmpleado", Comando);

                if (FilasInsertadas > 1)
                    MessageBox.Show("Se insertaron " + FilasInsertadas + " Empleados");

                else
                    MessageBox.Show("Se insertó " + FilasInsertadas + " Empleado");
            }
        }

        private void EliminarEmpleadosEnBD(String RutaBD, String NombreTabla, DataSet ds)
        {
            int FilasEliminadas;
            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
            {
                SqlCommand Comando = new SqlCommand();
                fila.RejectChanges();
                ArmarParametrosEmpleadosEliminar(ref Comando, fila);
                FilasEliminadas = EjecutarEmpleados(rutaIsotoposSQL, "EliminarEmpleado", Comando);

                if (FilasEliminadas > 1)
                    MessageBox.Show("Se eliminaron " + FilasEliminadas + " Empleados");

                else
                    MessageBox.Show("Se eliminó " + FilasEliminadas + " Empleado");
            }
        }

        private void ActualizarCambios2(String RutaBD, ref DataSet ds)
        {
            DataSet dsActualizar;
            DataSet dsEliminar;
            DataSet dsAgregar;

            if (TablaMesas.HasChanges(DataRowState.Modified))
            {
                dsActualizar = new DataSet();
                dsActualizar = TablaMesas.GetChanges(DataRowState.Modified);
                ActualizarMesasEnBD(rutaIsotoposSQL, "Mesas", dsActualizar);
            }
            if (TablaMesas.HasChanges(DataRowState.Added))
            {
                dsAgregar = new DataSet();
                dsAgregar = TablaMesas.GetChanges(DataRowState.Added);
                InsertarMesasEnBD(rutaIsotoposSQL, "Mesas", dsAgregar);
            }
            if (TablaMesas.HasChanges(DataRowState.Deleted))
            {
                dsEliminar = new DataSet();
                dsEliminar = TablaMesas.GetChanges(DataRowState.Deleted);
                EliminarMesasEnBD(rutaIsotoposSQL, "Mesas", dsEliminar);
            }
        }
        private void ArmarParametrosMesas(ref SqlCommand Comando, DataRow fila)
        {
            SqlParameter SqlParametros = new SqlParameter();
            SqlParametros = Comando.Parameters.Add("@NombreMesa", SqlDbType.VarChar, 50);
            SqlParametros.Value = fila["NombreMesa"];
            SqlParametros = Comando.Parameters.Add("@IdMesa", SqlDbType.Int);
            SqlParametros.Value = fila["IdMesa"];
        }

        private void ArmarParametrosMesasEliminar(ref SqlCommand Comando, DataRow fila)
        {
            SqlParameter SqlParametros = new SqlParameter();
            SqlParametros = Comando.Parameters.Add("@IdMesa", SqlDbType.Int);
            SqlParametros.Value = fila["IdMesa"];
        }

        private void ActualizarMesasEnBD(String RutaBD, String NombreTabla, DataSet ds)
        {
            int FilasActualizadas;
            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
            {
                SqlCommand Comando = new SqlCommand();
                ArmarParametrosMesas(ref Comando, fila);
                FilasActualizadas = EjecutarMesas(rutaIsotoposSQL, "ActualizarMesa", Comando);

                if (FilasActualizadas > 1)
                    MessageBox.Show("Se modificaron " + FilasActualizadas + " Mesas");

                else
                    MessageBox.Show("Se modificó " + FilasActualizadas + " Mesa");
            }
        }

        private int EjecutarMesas(String RutaBD, String NombreSP, SqlCommand Comando)
        {
            int FilasCambiadas;
            SqlConnection Conexion = new SqlConnection(RutaBD);
            Conexion.Open();
            SqlCommand cmd = new SqlCommand();
            cmd = Comando;
            cmd.Connection = Conexion;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = NombreSP;
            FilasCambiadas = cmd.ExecuteNonQuery();
            Conexion.Close();
            return FilasCambiadas;
        }

        private void InsertarMesasEnBD(String RutaBD, String NombreTabla, DataSet ds)
        {
            int FilasInsertadas;
            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
            {
                SqlCommand Comando = new SqlCommand();
                ArmarParametrosMesas(ref Comando, fila);
                FilasInsertadas = EjecutarMesas(rutaIsotoposSQL, "InsertarMesa", Comando);

                if (FilasInsertadas > 1)
                    MessageBox.Show("Se insertaron " + FilasInsertadas + " Mesas");

                else
                    MessageBox.Show("Se insertó " + FilasInsertadas + " Mesa");
            }
        }

        private void EliminarMesasEnBD(String RutaBD, String NombreTabla, DataSet ds)
        {
            int FilasEliminadas;
            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
            {
                SqlCommand Comando = new SqlCommand();
                fila.RejectChanges();
                ArmarParametrosMesasEliminar(ref Comando, fila);
                FilasEliminadas = EjecutarMesas(rutaIsotoposSQL, "EliminarMesa", Comando);

                if (FilasEliminadas > 1)
                    MessageBox.Show("Se eliminaron " + FilasEliminadas + " Mesas");

                else
                    MessageBox.Show("Se eliminó " + FilasEliminadas + " Mesa");
            }
        }
    }
}
